const jwt = require('jsonwebtoken');
const {error} = require('../utils/message');

module.exports = function (options) {
    return function (req, res, next) {
        // console.log(req.headers);return;
        // 如果没有提供 token，直接提示错误
        const token = req.headers.authorization || req.headers.token;
        // const token = req.headers.token;
        if (!token) {
            error(res, '当前接口需要认证才能访问')
            return
        }

        // 验证token是否正确
        jwt.verify(token, process.env.SECRET, function (err, decoded) {
            if (err) {
                if (err.name == 'TokenExpiredError') {
                    error(res, 'token已经过期，请重新登录!', 50014)
                    return
                }

                if (err.name == 'JsonWebTokenError') {
                    error(res, 'token 错误，请重新登录！', 50008)
                    return
                }
            } else {
                // 判断是否是管理员用户
                if (!decoded.user.admin) {
                    error(res, '非法登录！', 500010)
                    return
                }

                // decoded里面装的是解密出来的是，之前加密生成token的东西
                // 解析出来的数据存入req
                req.decoded = decoded;
                next();
            }
        })
    }
}
